package com.srv.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.srv.exceptions.EstadoInvalidoException;
import com.srv.pojo.Estado;

public class DAOEstado extends DAOGenerico implements DAOGenericoInterface {

	public DAOEstado() throws ClassNotFoundException, SQLException {
		super();
	}

	@Override
	public void insert(Object object) throws SQLException {
		Connection connection = this.getConnection();
		Statement st = connection.createStatement();
		Estado estado = (Estado) object;
		String cmdInsert = "INSERT INTO estado VALUES (" + estado.getEscode()
				+ "," + estado.getNome() + "," + estado.getSigla() + ");";
		st.executeUpdate(cmdInsert);
		st.close();
	}

	@Override
	public void update(Object object) throws Exception {
		Connection connection = this.getConnection();
		Statement st = connection.createStatement();
		Estado estado = (Estado) object;
		String cmdUpdate = "UPDATE estado SET ";
		if (!estado.getSigla().equals("") && !estado.getNome().equals("")) {
			cmdUpdate.concat("sigla = " + estado.getSigla() + ", nome = "
					+ estado.getNome());
		} else if (!estado.getSigla().equals("") && estado.getNome().equals("")) {
			cmdUpdate.concat("sigla = " + estado.getSigla());
		} else if (estado.getSigla().equals("") && !estado.getNome().equals("")) {
			cmdUpdate.concat("nome = " + estado.getNome());
		} else {
			throw new EstadoInvalidoException("Os parâmetros informados não são suficientes para atualizar o estado!");
		}
		cmdUpdate.concat(" WHERE escode = " + estado.getEscode() + ";");
		st.executeUpdate(cmdUpdate);
		st.close();
	}

	@Override
	public void delete(Object object) throws Exception {
		Connection connection = this.getConnection();
		Statement st = connection.createStatement();
		Estado estado = (Estado) object;
		if (!this.getEstadoList().contains(estado)){
			throw new EstadoInvalidoException("O estado não pode ser excluído pois não existe na base de dados " + estado.getNome());
		}
		String cmdDelete = "DELETE FROM estado WHERE escode = "
				+ estado.getEscode() + ";";
		st.executeUpdate(cmdDelete);
		st.close();
	}

	public List<Estado> getEstadoList() throws SQLException {
		ResultSet rs = this
				.getResultSet("SELECT e.escode, e.nome, e.sigla FROM Estado e");
		List<Estado> estadoList = new ArrayList<Estado>();
		Estado estado = null;
		while (rs.next()) {
			estado = new Estado();
			estado.setEscode(rs.getInt("escode"));
			estado.setNome(rs.getString("nome"));
			estado.setSigla(rs.getString("sigla"));
			estadoList.add(estado);
		}
		rs.close();
		return estadoList;
	}

	public Estado getEstadoByEscode(int escode) throws SQLException {
		ResultSet rs = this
				.getResultSet("SELECT * FROM estado e WHERE e.escode = "
						+ escode);
		Estado estado = new Estado();
		while (rs.next()) {
			estado.setEscode(rs.getInt("escode"));
			estado.setNome(rs.getString("nome"));
			estado.setSigla(rs.getString("sigla"));
		}
		rs.close();
		return estado;
	}

}
